package com.zjb.demo.common.domain.response;

import org.smartboot.http.common.enums.HttpStatus;

import java.io.Serial;
import java.io.Serializable;

/**
 * @author 庄佳彬
 * @since 2023/12/23 14:03
 */
public record AjaxResult<T>(int code, String msg, T data) implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;
    /**
     * 成功
     */
    public static final int SUCCESS = HttpStatus.OK.value();
    /**
     * 失败
     */
    public static final int FAIL = HttpStatus.INTERNAL_SERVER_ERROR.value();

    /**
     * 发送成功结果的静态方法
     *
     * @param <T> 泛型类型参数
     * @return AjaxResult对象，包含成功状态、成功信息和空的结果数据
     */
    public static <T> AjaxResult<T> success() {
        return new AjaxResult<>(SUCCESS, "操作成功", null);
    }

    /**
     * 返回一个表示成功状态的AjaxResult对象。
     *
     * @param data 数据对象
     * @param <T>  泛型类型
     * @return AjaxResult对象
     */
    public static <T> AjaxResult<T> success(T data) {
        return new AjaxResult<>(SUCCESS, "操作成功", data);
    }

    /**
     * 发送失败结果的静态方法
     *
     * @param <T> 泛型类型参数
     * @return AjaxResult对象，包含失败状态、失败信息和空的结果数据
     */
    public static <T> AjaxResult<T> fail() {
        return new AjaxResult<>(FAIL, "操作失败", null);
    }

    /**
     * 发送失败结果的静态方法
     *
     * @param <T>     泛型类型参数
     * @param message 失败信息
     * @return AjaxResult对象，包含失败状态、失败信息和空的结果数据
     */
    public static <T> AjaxResult<T> fail(String message) {
        return new AjaxResult<>(FAIL, message, null);
    }
    /**
     * 通用的Ajax请求失败时的处理方法
     *
     * @param code 请求失败时的错误码
     * @param message 请求失败时的错误信息
     * @param <T> 泛型类型
     * @return Ajax请求结果
     */
    public static <T> AjaxResult<T> fail(int code, String message) {
        return new AjaxResult<>(code, message, null);
    }


}
